package com.hzlj.position.locate.common.dto.position;

import cn.hutool.core.lang.Pair;
import com.hzlj.position.config.common.dto.common.PositionHandleExtDTO;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author lifh
 * @date 2023/3/29 10:34
 **/
@Data
@Accessors(chain = true)
public class PositionHandleDTO {
    /**
     * 分库分表标识:顺序与ids对应
     */
    private List<PositionKeyDTO> keys;

    /**
     * 处理状态,dict-HANDLE_STATUS
     */
    private String handleStatus = "2";

    /**
     * 异常处理时间，如果没有值，则取当前时间
     */
    private Date handleTime = new Date();
    /**
     * 异常处理内容
     */
    private PositionHandleExtDTO handleExt;
    /**
     * 核实是否正常
     */
    private Boolean normal;
    /**
     * 是否从openApi推送
     */
    private Boolean fromOpenApi = false;
    /**
     * 自动处理
     */
    private Boolean autoHandle;
    /**
     * 系统核查标记,0核查中 1核查正常 2核查异常,dict-POSITION_SYS_CHECK
     */
    private String sysCheck;

    /**
     * 从keys转化来的ids
     */
    public List<String> ids() {
        return this.getKeys().stream().map(PositionKeyDTO::getId).collect(Collectors.toList());
    }

    /**
     * 从keys获取的最小最大的belongDay
     */
    public Pair<Date, Date> minMaxPositionTimes() {
        List<Date> positionTimes = this.getKeys().stream().map(PositionKeyDTO::getPositionTime).sorted().collect(Collectors.toList());
        Date min = positionTimes.get(0);
        Date max = positionTimes.get(positionTimes.size() - 1);
        return new Pair<>(min, max);
    }


}
